package com.wgy.day39.反射.反射案例;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * Created by pc on 2020/12/15 23:34
 * Description: LearningJava
 */
/*
需求:写一个"框架",在不改变改类任何代码的前提下,可以帮我们创建任意类的对象,可以执行任意的方法

实现:1.配置文件
    2.反射

步骤: 1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中
     2.在程序中加载读取配置文件
     3.使用反射技术来加载类文件进内存
     4.创建对象
     5.执行方法
*/
public class Demo05ReflectTest {
    public static void main(String[] args) throws Exception {
        //1.创建 Properties对象
        Properties pro=new Properties();

        //2.获取class目录下的配置文件并返回字节输入流
        ClassLoader classLoader = Demo05ReflectTest.class.getClassLoader();
        InputStream is= classLoader.getResourceAsStream("pro.properties");

        //3.通过Properties对象中的方法load加载配置文件,存储到Properties集合中
        pro.load(is);
        
        //4.获取配置文件中的数据
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");

        //5.加载该类进内存
        Class cls = Class.forName(className);
        //6.创建对象
        Object obj = cls.newInstance();
        //7.获取方法对象
        Method method = cls.getMethod(methodName);
        //8.执行方法
        method.invoke(obj);


    }
}
